﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using BolsaTrabajo.BusinessEntities;

namespace BolsaTrabajo.DataAccess
{
    public class AvisoTrabajoData
    {
        private String stConnection = String.Empty;

        public AvisoTrabajoData()
        {
            stConnection = System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();
        }

        public AvisoTrabajo CargarEntidad(Int32 id)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_ListarPorId";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@id", ParameterDirection.Input, SqlDbType.Int, id);

            AvisoTrabajo item = new AvisoTrabajo();
            try
            {
                cn.Open();
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                while (dr.Read())
                {
                    item.IdAvisoTrabajo = dr.GetInt32(dr.GetOrdinal("idAvisoTrabajo"));
                    item.Titulo = dr.GetString(dr.GetOrdinal("titulo"));
                    item.FechaInicioVigencia = dr.GetDateTime(dr.GetOrdinal("fechaInicioVigencia"));
                    item.FechaFinVigencia = dr.GetDateTime(dr.GetOrdinal("fechaFinVigencia"));
                    item.IdEmpresa = dr.GetInt32(dr.GetOrdinal("idEmpresa"));
                    item.DescripcionPuesto = dr.GetString(dr.GetOrdinal("descripcionPuesto"));
                    item.FechaPublicacion = dr.GetDateTime(dr.GetOrdinal("fechaPublicacion"));
                    item.Distrito = dr.GetString(dr.GetOrdinal("distrito"));
                    item.Salario = dr.GetString(dr.GetOrdinal("salario"));
                    item.Comienzo = dr.GetBoolean(dr.GetOrdinal("comienzo"));
                    item.TipoTrabajo = dr.GetString(dr.GetOrdinal("tipoTrabajo"));
                    item.Telefono = dr.GetString(dr.GetOrdinal("telefono"));
                    item.CorreoElectronico = dr.GetString(dr.GetOrdinal("correoElectronico"));
                }
                dr.Close();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                cn.Dispose();
            }
            return item;
        }

        public bool Registrar(AvisoTrabajo item)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_Registrar";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@applicationId", ParameterDirection.Input, SqlDbType.UniqueIdentifier, item.ApplicationId);
            SQLHelper.AddParam(ref cmd, "@titulo", ParameterDirection.Input, SqlDbType.VarChar, item.Titulo);
            SQLHelper.AddParam(ref cmd, "@fechaInicioVigencia", ParameterDirection.Input, SqlDbType.DateTime, item.FechaInicioVigencia);
            SQLHelper.AddParam(ref cmd, "@fechaFinVigencia", ParameterDirection.Input, SqlDbType.DateTime, item.FechaFinVigencia);
            SQLHelper.AddParam(ref cmd, "@idEmpresa", ParameterDirection.Input, SqlDbType.Int, item.IdEmpresa);
            SQLHelper.AddParam(ref cmd, "@descripcionPuesto", ParameterDirection.Input, SqlDbType.VarChar, 50, item.DescripcionPuesto);
            SQLHelper.AddParam(ref cmd, "@fechaPublicacion", ParameterDirection.Input, SqlDbType.DateTime, item.FechaPublicacion);
            SQLHelper.AddParam(ref cmd, "@distrito", ParameterDirection.Input, SqlDbType.VarChar, 50, item.Distrito);
            SQLHelper.AddParam(ref cmd, "@salario", ParameterDirection.Input, SqlDbType.VarChar, 50, item.Salario);
            SQLHelper.AddParam(ref cmd, "@comienzo", ParameterDirection.Input, SqlDbType.Bit, item.Comienzo);
            SQLHelper.AddParam(ref cmd, "@tipoTrabajo", ParameterDirection.Input, SqlDbType.VarChar, 50, item.TipoTrabajo);
            SQLHelper.AddParam(ref cmd, "@telefono", ParameterDirection.Input, SqlDbType.VarChar, 50, item.Telefono);
            SQLHelper.AddParam(ref cmd, "@correoElectronico", ParameterDirection.Input, SqlDbType.VarChar, 50, item.CorreoElectronico);
            SQLHelper.AddParam(ref cmd, "@idUsuarioCreacion", ParameterDirection.Input, SqlDbType.UniqueIdentifier, item.IdUsuarioCreacion);
            SQLHelper.AddParam(ref cmd, "@fechaCreacion", ParameterDirection.Input, SqlDbType.DateTime, item.FechaCreacion);
            SQLHelper.AddParam(ref cmd, "@idEstado", ParameterDirection.Input, SqlDbType.Bit, item.IdEstado);

            bool resultado = false;

            try
            {
                cn.Open();
                cmd.ExecuteNonQuery();
                resultado = true;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                cn.Dispose();
            }
            return resultado;
        }

        public bool Actualizar(AvisoTrabajo item)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_Actualizar";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@idAvisoTrabajo", ParameterDirection.Input, SqlDbType.Int, item.IdAvisoTrabajo);
            SQLHelper.AddParam(ref cmd, "@applicationId", ParameterDirection.Input, SqlDbType.UniqueIdentifier, item.ApplicationId);
            SQLHelper.AddParam(ref cmd, "@titulo", ParameterDirection.Input, SqlDbType.VarChar, item.Titulo);
            SQLHelper.AddParam(ref cmd, "@fechaInicioVigencia", ParameterDirection.Input, SqlDbType.DateTime, item.FechaInicioVigencia);
            SQLHelper.AddParam(ref cmd, "@fechaFinVigencia", ParameterDirection.Input, SqlDbType.DateTime, item.FechaFinVigencia);
            SQLHelper.AddParam(ref cmd, "@idEmpresa", ParameterDirection.Input, SqlDbType.Int, item.IdEmpresa);
            SQLHelper.AddParam(ref cmd, "@descripcionPuesto", ParameterDirection.Input, SqlDbType.VarChar, 50, item.DescripcionPuesto);
            SQLHelper.AddParam(ref cmd, "@fechaPublicacion", ParameterDirection.Input, SqlDbType.DateTime, item.FechaPublicacion);
            SQLHelper.AddParam(ref cmd, "@distrito", ParameterDirection.Input, SqlDbType.VarChar, 50, item.Distrito);
            SQLHelper.AddParam(ref cmd, "@salario", ParameterDirection.Input, SqlDbType.VarChar, 50, item.Salario);
            SQLHelper.AddParam(ref cmd, "@comienzo", ParameterDirection.Input, SqlDbType.Bit, item.Comienzo);
            SQLHelper.AddParam(ref cmd, "@tipoTrabajo", ParameterDirection.Input, SqlDbType.VarChar, 50, item.TipoTrabajo);
            SQLHelper.AddParam(ref cmd, "@telefono", ParameterDirection.Input, SqlDbType.VarChar, 50, item.Telefono);
            SQLHelper.AddParam(ref cmd, "@correoElectronico", ParameterDirection.Input, SqlDbType.VarChar, 50, item.CorreoElectronico);

            bool resultado = false;

            try
            {
                cn.Open();
                cmd.ExecuteNonQuery();
                resultado = true;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                cn.Dispose();
            }
            return resultado;
        }

        public bool Eliminar(AvisoTrabajo item)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_Eliminar";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@idAvisoTrabajo", ParameterDirection.Input, SqlDbType.Int, item.IdAvisoTrabajo);
            SQLHelper.AddParam(ref cmd, "@applicationId", ParameterDirection.Input, SqlDbType.UniqueIdentifier, item.ApplicationId);
            SQLHelper.AddParam(ref cmd, "@idEmpresa", ParameterDirection.Input, SqlDbType.Int, item.IdEmpresa);

            bool resultado = false;

            try
            {
                cn.Open();
                cmd.ExecuteNonQuery();
                resultado = true;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                {
                    cn.Close();
                }
                cn.Dispose();
            }
            return resultado;
        }

        public List<AvisoTrabajo> ListarCabeceraPorCategoria(Int32 idCategoria)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_CabeceraListarPorCategoria";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@idCategoria", ParameterDirection.Input, SqlDbType.Int, idCategoria);

            List<AvisoTrabajo> lista = new List<AvisoTrabajo>();
            try
            {
                cn.Open();
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (dr.Read())
                {
                    AvisoTrabajo item = new AvisoTrabajo();
                    item.IdAvisoTrabajo = dr.GetInt32(dr.GetOrdinal("idAvisoTrabajo"));
                    item.Titulo = dr.GetString(dr.GetOrdinal("titulo"));
                    lista.Add(item);
                    item = null;
                }
                dr.Close();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                cn.Dispose();
            }
            return lista;
        }

        public List<AvisoTrabajo> ListarDetallePorAvisoTrabajo(Int32 idAvisoTrabajo)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_DetalleListarPorAvisoTrabajo";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@idAvisoTrabajo", ParameterDirection.Input, SqlDbType.Int, idAvisoTrabajo);

            List<AvisoTrabajo> lista = new List<AvisoTrabajo>();
            try
            {
                cn.Open();
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (dr.Read())
                {
                    AvisoTrabajo item = new AvisoTrabajo();
                    item.IdAvisoTrabajo = dr.GetInt32(dr.GetOrdinal("idAvisoTrabajo"));
                    item.DescripcionPuesto = dr.GetString(dr.GetOrdinal("descripcionPuesto"));
                    item.FechaPublicacion = dr.GetDateTime(dr.GetOrdinal("fechaPublicacion"));
                    item.Distrito = dr.GetString(dr.GetOrdinal("distrito"));
                    item.Salario = dr.GetString(dr.GetOrdinal("salario"));
                    //item.Comienzo = dr.GetBoolean(dr.GetOrdinal("comienzo"));
                    item.TipoTrabajo = dr.GetString(dr.GetOrdinal("tipoTrabajo"));
                    lista.Add(item);
                    item = null;
                }
                dr.Close();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                cn.Dispose();
            }
            return lista;
        }

        public List<AvisoTrabajo> ListarPorEmpresa(Int32 idEmpresa)
        {
            SqlConnection cn = new SqlConnection(stConnection);
            SqlCommand cmd = cn.CreateCommand();
            cmd.CommandTimeout = 216000000;
            cmd.CommandText = "usp_AvisoTrabajo_ListarPorEmpresa";
            cmd.CommandType = CommandType.StoredProcedure;

            SQLHelper.AddParam(ref cmd, "@idEmpresa", ParameterDirection.Input, SqlDbType.Int, idEmpresa);

            List<AvisoTrabajo> lista = new List<AvisoTrabajo>();
            try
            {
                cn.Open();
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (dr.Read())
                {
                    AvisoTrabajo item = new AvisoTrabajo();
                    item.IdAvisoTrabajo = dr.GetInt32(dr.GetOrdinal("idAvisoTrabajo"));
                    item.Titulo = dr.GetString(dr.GetOrdinal("titulo"));
                    lista.Add(item);
                    item = null;
                }
                dr.Close();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
                cn.Dispose();
            }
            return lista;
        }
    }
}
